package com.jt.controller;

import com.jt.pojo.User;
import com.jt.service.UserService;
import com.jt.vo.PageResult;
import com.jt.vo.SysResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author 刘昱江
 * 时间 2021/5/11
 */
@RestController
@CrossOrigin
//抽取共同的请求的路径
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/hello")
    public List<User> hello(){

        return userService.findAll();
    }

    /**
     * 业务需求:用户登陆校验
     * 类型:POST
     * URL: /user/login
     * 参数: username/password json串 {username: "xxx", password: "xxx"}
     * 返回值: SysResult对象  data的String类型的信息 token
     * 用户名/密码 admin123/admin123456
     */
    @PostMapping("/login")
    public SysResult login(@RequestBody User user){
        //System.out.println(user);
        //1.根据用户名和密码校验 返回token Service层中完成
        String token = userService.login(user);
        //2. token 有值业务正确   | null 业务操作失败
        if(token == null){
            return SysResult.fail();
        }
        return SysResult.success(token);
    }

    /**
     * 业务: 实现用户列表的分页查询
     * 类型: GET
     * URL:  /user/list
     * 参数:  PageResult对象进行接收  传递了3个参数
     * 返回值: SysResult对象(PageResult对象) 返回5个
     */
    @GetMapping("/list")
    public SysResult getUserList(PageResult pageResult){//3个
        //通过业务处理 获取总数/分页后的结果
        pageResult = userService.getUserList(pageResult);
        return SysResult.success(pageResult); //5个
    }

    /**
     * 业务: 修改用户状态
     * 类型: put
     * URL: /user/status/{id}/{status}
     * 参数: id主键 status 状态信息true/false
     * 返回值: SysResult对象  没有业务参数
     */
    @PutMapping("/status/{id}/{status}")
    public SysResult updateStatus(User user){

        userService.updateStatus(user);
        return SysResult.success();
    }

    /**
     * 业务: 实现用户新增
     * URL: /user/addUser
     * 类型: post类型
     * 参数: 整合form表单数据  JSON串  user对象接收
     * 返回值: SysResult对象
     */
    @PostMapping("/addUser")
    public SysResult addUser(@RequestBody User user){

        userService.addUser(user);
        return SysResult.success();
    }

    /**
     * 业务: 根据ID查询用户信息
     *
     * URL:  http://localhost:8091/user/2
     * 参数:  id
     * 返回值: SysResult(User对象)
     */
    @GetMapping("/{id}")
    public SysResult getUserById(@PathVariable Integer id){

        User user = userService.getUserById(id);
        return SysResult.success(user);
    }

    /**
     * 需求: 实现用户修改操作
     * 请求类型: PUT
     * URL: /user/updateUser
     * 参数: User对象~~~~ user的JSON串  (id,phone,email)
     * 返回值: SysResult对象
     */
    @PutMapping("/updateUser")
    public SysResult updateUser(@RequestBody User user){

        userService.updateUser(user);
        return SysResult.success();
    }

    /**
     * 业务: 根据ID删除用户信息
     * URL: /user/{id}
     * 参数: ID
     * 类型: Delete
     * 返回值: SysResult对象
     */
    @DeleteMapping("/{id}")
    public SysResult deleteUserById(@PathVariable Integer id){

        userService.deleteUserById(id);
        return SysResult.success();
    }

}
